.\"
.\"  epoll by Davide Libenzi ( efficient event notification retrieval )
.\"  Copyright (C) 2003  Davide Libenzi
.\"
.\"  This program is free software; you can redistribute it and/or modify
.\"  it under the terms of the GNU General Public License as published by
.\"  the Free Software Foundation; either version 2 of the License, or
.\"  (at your option) any later version.
.\"
.\"  This program is distributed in the hope that it will be useful,
.\"  but WITHOUT ANY WARRANTY; without even the implied warranty of
.\"  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\"  GNU General Public License for more details.
.\"
.\"  You should have received a copy of the GNU General Public License
.\"  along with this program; if not, write to the Free Software
.\"  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
.\"
.\"  Davide Libenzi <davidel@xmailserver.org>
.\"
.\"
.TH EPOLL_WAIT 2 "23 October 2002" Linux "Linux Programmer's Manual"
.SH NAME
epoll_wait \- wait for an I/O event on an
.B epoll
file descriptor
.SH SYNOPSIS
.B #include <sys/epoll.h>
.sp
.BR "int epoll_wait(int " epfd ", struct epoll_event * " events ", int " maxevents ", int " timeout)
.SH DESCRIPTION
Wait for events on the
.B epoll
file descriptor
.I epfd
for a maximum time of
.I timeout
milliseconds. The memory area pointed to by
.I events
will contain the events that will be available for the caller.
Up to
.I maxevents
are returned by
.BR epoll_wait (2).
The
.I maxevents
parameter must be greater than zero. Specifying a
.I timeout
of \-1 makes
.BR epoll_wait (2)
wait indefinitely, while specifying a
.I timeout
equal to zero makes
.BR epoll_wait (2)
to return immediately even if no events are available ( return code equal to zero ).
The
.B struct epoll_event
is defined as :
.sp
.nf

	typedef union epoll_data {
		void *ptr;
		int fd;
		__uint32_t u32;
		__uint64_t u64;
	} epoll_data_t;

	struct epoll_event {
		__uint32_t events;	/* Epoll events */
		epoll_data_t data;	/* User data variable */
	};

.fi

The
.I data
of each returned structure will contain the same data the user set with a
.BR epoll_ctl (2)
.IR ( EPOLL_CTL_ADD , EPOLL_CTL_MOD )
while the
.I events
member will contain the returned event bit field.
.SH "RETURN VALUE"
When successful,$
.BR epoll_wait (2)
returns the number of file descriptors ready for the requested I/O, or zero
if no file descriptor became ready during the requested
.I timeout
milliseconds.  When an error occurs,$
.BR epoll_wait (2)
returns \-1 and
.I errno
is set appropriately.
.SH ERRORS
.TP
.B EBADF
.I epfd
is not a valid file descriptor.
.TP
.B EINVAL
The supplied file descriptor,
.IR epfd ,
is not an
.B epoll
file descriptor, or the
.I maxevents
parameter is less than or equal to zero.
.TP
.B EFAULT
The memory area pointed to by
.I events
is not accessible with write permissions.
.SH CONFORMING TO
.BR epoll_wait (2)
is a new API introduced in Linux kernel
.BR 2.5.44 .
The interface should be finalized by Linux kernel
.BR 2.5.66 .
.SH "SEE ALSO"
.BR epoll (4)
.BR epoll_create (2)
.BR epoll_ctl (2)

